Page({
  data: {
    schema:[
    ],
    formData:{
    },
    title: '',
    result: '',
    remark: '',
    apiName: '',
    // 加速度计数据，初始值都为0
    // accelerometerData: {
      x: 0,
      y: 0,
      z: 0,
    // },
    // 小球位置
    ballPosition: {
      x: 150,
      y: 300
    },
    // 容器尺寸
    container: {
      width: 300,
      height: 600
    },
    // 小球尺寸
    ballSize: 30,
    // 是否正在监听
    isListening: false,
    // 是否正在处理中
    isLoading: false
  },
  onLoad(options) {
    wx.setNavigationBarTitle({
      title: options.title,
    })
    
    this.setData({
      title: options.title,
      zh:options.zh,
      remark: options.remark,
      webUrl: options.webUrl
    })
    // 获取屏幕尺寸来设置容器大小
    wx.getSystemInfo({
      success: (res) => {
        // 留出一些边距
        const containerWidth = res.windowWidth - 40;
        const containerHeight = res.windowHeight * 0.7;
        
        this.setData({
          container: {
            width: containerWidth,
            height: containerHeight
          },
          // 初始位置设置在容器中心
          ballPosition: {
            x: containerWidth / 2,
            y: containerHeight / 2
          }
        });
      }
    });
  },
  onUnload() {
    // 页面卸载时停止监听，释放资源
    this.stopListening();
  },

  /**
   * 开始监听加速度计数据
   */
  startListening(e) {
    const that = this
    if (this.data.isListening || this.data.isLoading) return;

    that.setData({ isLoading: true });

    // 开始监听加速度计数据
    wx.startAccelerometer({
      interval: 'game', // 监听频率，game表示适用于游戏的高频监听
      success: (res1) => {
        console.log('开始监听加速度计数据');
        that.setData({
          result: res1,
          apiName: e.currentTarget.dataset.apiname
        })
        // 监听加速度计数据变化
        this.accelerometerWatch = wx.onAccelerometerChange((res) => {
          that.setData({
            x: res.x.toFixed(2),
            y: res.y.toFixed(2),
            z: res.z.toFixed(2)
          });
          
          // 根据加速度数据更新小球位置
          this.updateBallPosition(res);
        });

        that.setData({
          isListening: true,
          isLoading: false
        });
      },
      fail: (err) => {
        console.error('开始监听失败', err);
        this.setData({
          result: err,
          apiName: e.currentTarget.dataset.apiname
        })
        wx.showToast({
          title: '开启失败',
          icon: 'none',
          duration: 2000
        });
        that.setData({ isLoading: false });
      }
    });
  },

  /**
   * 停止监听加速度计数据
   */
  stopListening(e) {
    if (!this.data.isListening || this.data.isLoading) return;

    this.setData({ isLoading: true });

    // 停止监听加速度计数据
    wx.stopAccelerometer({
      success: (res) => {
        console.log('停止监听加速度计数据');
        this.setData({
          result: res,
          apiName: e.currentTarget.dataset.apiname
        })
        // 移除监听事件
        if (this.accelerometerWatch) {
          this.accelerometerWatch();
          this.accelerometerWatch = null;
        }

        this.setData({
          isListening: false,
          isLoading: false
        });
      },
      fail: (err) => {
        console.error('停止监听失败', err);
        this.setData({
          result: err,
          apiName: e.currentTarget.dataset.apiname
        })
        wx.showToast({
          title: '停止失败',
          icon: 'none',
          duration: 2000
        });
        this.setData({ isLoading: false });
      }
    });
  },

  /**
   * 根据加速度数据更新小球位置
   */
  updateBallPosition(accelerometerData) {
    const { ballPosition, container, ballSize } = this.data;
    const speedFactor = 3; // 速度系数，控制小球移动速度
    
    // 计算新位置 (注意：这里x和y互换是为了更直观的控制体验)
    let newX = ballPosition.x + accelerometerData.y * speedFactor;
    let newY = ballPosition.y - accelerometerData.x * speedFactor;
    
    // 边界检查，确保小球不会超出容器范围
    const maxX = container.width - ballSize;
    const maxY = container.height - ballSize;
    
    newX = Math.max(ballSize/2, Math.min(newX, maxX));
    newY = Math.max(ballSize/2, Math.min(newY, maxY));
    
    // 更新小球位置
    this.setData({
      ballPosition: {
        x: newX,
        y: newY
      }
    });
  },
  onAccelerometerChange(e){
    this.accelerometerWatch =wx.onAccelerometerChange((res) => {
      this.setData({
        result: res,
        apiName: e.currentTarget.dataset.apiname
      })
    })
  },
  offAccelerometerChange(e){
    wx.offAccelerometerChange(this.accelerometerWatch)
      this.setData({
        result: "移除加速度数据事件的监听函数",
        apiName: e.currentTarget.dataset.apiname
      })
    
  },
})
